package com.hrbxlh.virtualization.service;

import com.github.pagehelper.PageInfo;
import com.hrbxlh.virtualization.param.ImageCoverParam;
import com.hrbxlh.virtualization.param.ImageCreateParam;
import com.hrbxlh.virtualization.pojo.Image;
import com.hrbxlh.virtualization.vo.DesktopVO;
import com.hrbxlh.virtualization.vo.ImageVO;

import java.util.List;

/**
 * @author cheer
 */
public interface ImageService {

    /**
     * 镜像是否存在
     */
    boolean isImageExists(Long imageId);

    Image queryImageById(Long imageId);

    /**
     * 管理员查询镜像列表
     *
     * @param isInitial 是否为预置镜像
     */
    List<ImageVO> listImages(Boolean isInitial);

    /**
     * 管理员分页查询镜像列表
     *
     * @param pageNum  页数
     * @param pageSize 每页大小
     */
    PageInfo<ImageVO> listImagesByPage(Integer pageNum, Integer pageSize);

    /**
     * 管理员删除镜像
     *
     * @param imageId  镜像Id
     * @param isForced 是否强制删除
     */
    void deleteImage(Long imageId, Boolean isForced);

    /**
     * 教师查询镜像列表
     *
     * @param isInitial  是否为预置镜像
     * @param stuorteaId 教师id
     */
    List<ImageVO> listImages(Boolean isInitial, String stuorteaId);

    /**
     * 教师分页查询镜像列表
     *
     * @param pageNum    页数
     * @param pageSize   每页大小
     * @param stuorteaId 教师id
     */
    PageInfo<ImageVO> listImagesByPage(Integer pageNum, Integer pageSize, String stuorteaId);

    /**
     * 查看镜像
     *
     * @param stuorteaId 教师Id
     * @param imageId    镜像Id
     */
    DesktopVO getDesktop(String stuorteaId, Long imageId);

    /**
     * 保存镜像
     *
     * @param stuorteaId       教师Id
     * @param imageCreateParam 镜像保存参数
     * @return 镜像Id
     */
    Long createImage(String stuorteaId, ImageCreateParam imageCreateParam);

    /**
     * 重新选择镜像
     *
     * @param stuorteaId  教师Id
     * @param containerId 容器Id
     * @param imageId     镜像Id
     */
    DesktopVO repickImage(String stuorteaId, Long containerId, Long imageId);

    /**
     * 共享镜像
     *
     * @param stuorteaId 教师Id
     * @param imageId    镜像Id
     */
    void shareImage(String stuorteaId, Long imageId);

    /**
     * 取消共享镜像
     *
     * @param stuorteaId 教师Id
     * @param imageId    镜像Id
     */
    void unshareImage(String stuorteaId, Long imageId);

    /**
     * 教师删除镜像
     *
     * @param imageId    镜像Id
     * @param isForced   是否强制删除
     * @param stuorteaId 教师Id
     */
    void deleteImage(Long imageId, Boolean isForced, String stuorteaId);

    /**
     * 覆盖镜像
     *
     * @param stuorteaId      教师Id
     * @param imageCoverParam 镜像覆盖参数
     * @return 镜像Id
     */
    Long coverImage(String stuorteaId, ImageCoverParam imageCoverParam);

}
